// convert_base函数中，首先使用parse_input解析输入字符串，得到数字部分和基数部分。
// 然后，使用u32::from_str_radix将数字部分从指定的基数转换为十进制数。如果转换失败，返回"Invalid number"错误信息。
// 如果目标基数to_base为10，直接返回十进制结果的字符串表示。
pub fn convert_base(num_str: &str, to_base: u32) -> String {
    // 解析输入并提取数字部分和基数部分
    let (num_part, base_part) = parse_input(num_str);
    // 将数字部分从指定的基数转换为十进制
    let num_in_decimal = match u32::from_str_radix(num_part, base_part) {
        Ok(num) => num,
        Err(_) => return "Invalid number".to_string(),
    };
    // 如果目标基数是 10，直接返回十进制结果
    if to_base == 10 {
        return num_in_decimal.to_string();
    }
    // 转换十进制数为目标基数表示
    convert_from_decimal(num_in_decimal, to_base)
}

// 解析输入字符串，提取数字部分和基数部分
// parse_input用于解析输入字符串。输入字符串的格式为："num(base)"，其中num是数字部分，base是表示该数字的基数。
// parse_input将字符串分割为数字部分和基数部分，并将基数转换为u32类型。
fn parse_input(num_str: &str) -> (&str, u32) {
    let (num_part, base_part) = num_str.split_once('(').expect("Invalid format");
    let base = base_part.trim_end_matches(')').parse().expect("Invalid base");
    (num_part, base)
}

// 将十进制数字转换为目标基数的字符串表示
// convert_from_decimal使用除法和取余法进行进制转换，每次取余得到当前位的数字，依次推入结果向量Vec<char>中。
// 最后，反转结果向量并将其转换为字符串。
// 错误处理：如果数字格式不正确或基数无效，函数会通过expect触发错误，并返回适当的错误信息。
fn convert_from_decimal(mut num_in_decimal: u32, to_base: u32) -> String {
    let mut result = Vec::new();  // 使用 `Vec<char>` 来积累结果
    // 进行进制转换
    while num_in_decimal > 0 {
        let remainder = num_in_decimal % to_base;
        result.push(char::from_digit(remainder, to_base).expect("Invalid digit"));
        num_in_decimal /= to_base;
    }
    if result.is_empty() {
        return "0".to_string();
    }
    result.reverse();
    result.into_iter().collect()
}